﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Reportes_Graficos___Housekeeping___Limpieza;

namespace UricaoWeb.Presentacion
{
    public partial class API_limpieza_ConsultarItinerario : API_Seguridad_Principal
    {
        private LimpiezaLogica _limpiezaLog = new LimpiezaLogica();

        ///<sumary>
        ///Metodo que se encarga de cargar la pagina
        ///Parámetros:
        ///Object sender: objeto obtenido 
        ///EventArgs e:  evento de la ventana 
        ///</sumary>
        protected void Page_Load(object sender, EventArgs e)
        {
            var master = Master as MasterPage;
            if (master != null)
            {
                master.actualizar_label();
            }
            base.validar_usuario();
            TBNumHabitacion.Attributes.Add("onkeypress", "javascript:return ValidarSoloNumeros(event);");
            if (!IsPostBack)
            {

                LlenarComboPersonal();
            }

        }

        ///<sumary>
        ///Metodo que se encarga de realizar el llenado del combo con la informacion del personal   
        ///</sumary>
        private void LlenarComboPersonal()
        {
            DataTable _temDataTableEmpleados;
            _temDataTableEmpleados = LimpiezaLogica.ConsultarEmpleadosLimpieza();
            _temDataTableEmpleados.DefaultView.Sort = "Empleado";
            DDListPersonal.DataSource = _temDataTableEmpleados;
            DDListPersonal.DataTextField = "Empleado";
            DDListPersonal.DataValueField = "Id";
            DDListPersonal.DataBind();
            DDListPersonal.Items.Insert(0, new ListItem("Seleccione un Empleado", "0"));
        }

        ///<sumary>
        ///Metodo que inabilita el componente DDListPersonal  
        ///Parámetros:
        ///Object sender: objeto obtenido 
        ///EventArgs e:  evento de la ventana 
        ///</sumary>
        protected void DDListPersonal_SelectedIndexChanged(object sender, EventArgs e)
        {
            TBNumHabitacion.Enabled = false;

        }

        ///<sumary>
        ///Metodo que valida la seleccion del componente radio button en la vista
        ///inabilitando o habilitando las cosas necesarias
        ///Parámetros:
        ///Object sender: objeto obtenido 
        ///EventArgs e:  evento de la ventana 
        ///</sumary>
        protected void RBPersonal_CheckedChanged(object sender, EventArgs e)
        {
            TBNumHabitacion.Enabled = false;
            DDListPersonal.Enabled = true;
            RBNumeroHabitacion.Checked = false;
            LMensajeErrorConsultarI.Visible = false;
            GVEmpleadoHora.Visible = false;


        }

        ///<sumary>
        ///Metodo que valida la seleccion del componente radio button en la vista
        ///Parámetros:
        ///Object sender: objeto obtenido 
        ///EventArgs e:  evento de la ventana 
        ///</sumary>
        protected void RBNumeroHabitacion_CheckedChanged(object sender, EventArgs e)
        {
            DDListPersonal.Enabled = false;
            TBNumHabitacion.Enabled = true;
            RBPersonal.Checked = false;
            LMensajeErrorConsultarI.Visible = false;
            GVEmpleadoHora.Visible = false;
        }

        ///<sumary>
        ///Metodo que se encarga de validar la informacion correspondiente
        ///a cargar personal y horario por habitacion cuando se hace click en el boton 
        ///continuar
        ///Parámetros:
        ///Object sender: objeto obtenido 
        ///EventArgs e:  evento de la ventana 
        ///</sumary>
        protected void BContinuarConsultarP_Click(object sender, EventArgs e)
        {
            LimpiezaLogica.LimpiarVariableError();
            if (RBNumeroHabitacion.Checked)
            {
                if (_limpiezaLog.ValidarTexBox(TBNumHabitacion, LMensajeErrorConsultarI))
                {
                    if (!CargarPersonalYHorario(TBNumHabitacion.Text))
                    {
                        mensajesAlUsuario();
                    }
                }
            }
            else
            {
                if (!(DDListPersonal.SelectedIndex == 0))
                {
                    if (!CargarHabitacionYHorario(DDListPersonal.SelectedValue))
                    {
                        mensajesAlUsuario();
                    }
                }
                else
                {
                    _limpiezaLog.MostrarMensajeDeError(LMensajeErrorConsultarI, "Debe seleccionar un empleado");
                }
            }
        }

        ///<sumary>
        ///Metodo que se encarga de hacer la consulta del personal y su horario 
        ///con la habitacion correspondiente
        ///Parámetros:
        ///String numHabitacion: numero de habitacion 
        ///Retorno: 
        ///Bool: Devuelve true o false dependiendo del caso
        ///</sumary>
        private bool CargarPersonalYHorario(string numeroHabitacion)
        {
            GVEmpleadoHora.Visible = true;
            LMensajeErrorConsultarI.Visible = false;

            DataTable _tablaDatosItinerario;

            _tablaDatosItinerario = _limpiezaLog.ConsultarPersonalYHorario(numeroHabitacion);

            if (_tablaDatosItinerario != null && (_tablaDatosItinerario.Rows.Count > 0))
            {
                GVEmpleadoHora.DataSource = _tablaDatosItinerario;
                GVEmpleadoHora.DataBind();
                return true;
            }
            else
            {
                LimpiezaLogica._mensajeFinal = "Esta habitación no existe o no contiene registros de limpieza";
                return false;
            }
        }

        ///<sumary>
        ///Metodo que se encarga de hacer la consulta de la habitacion y el horario 
        ///correspondiente a un empleado 
        ///Parámetros:
        ///String idEmpleado: identificador del empleado
        ///Retorno: 
        ///Bool: Devuelve true o false dependiendo del caso
        ///Excepciones posibles: 
        ///Excepcion particular1: 
        ///</sumary>
        private bool CargarHabitacionYHorario(string idEmpleado)
        {
            GVEmpleadoHora.Visible = true;
            LMensajeErrorConsultarI.Visible = false;

            DataTable _tablaDatosItinerario;

            int id = Convert.ToInt32(idEmpleado);

            _tablaDatosItinerario = _limpiezaLog.ConsultarHabitacionYHorario(id);

            if (_tablaDatosItinerario != null && (_tablaDatosItinerario.Rows.Count > 0))
            {
                _tablaDatosItinerario = _limpiezaLog.FormatearNumHabitacion(_tablaDatosItinerario);
                GVEmpleadoHora.DataSource = _tablaDatosItinerario;
                GVEmpleadoHora.DataBind();
                return true;
            }
            else
            {
                return false;
            }
        }

        ///<sumary>
        ///Metodo que se encarga del mensaje de alerta para el usuario  
        ///</sumary>
        private void mensajesAlUsuario()
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "script", "alert('" + LimpiezaLogica._mensajeFinal + "');", true);
        }

        protected void GVEmpleadoHora_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GVEmpleadoHora.PageIndex = e.NewPageIndex;
            if (RBNumeroHabitacion.Checked)
            {
                CargarPersonalYHorario(TBNumHabitacion.Text);
            }
            else
            {
                CargarHabitacionYHorario(DDListPersonal.SelectedValue);
            }
        }
    }
}